import { DictProps } from '@/typings/typings'

export type CompType =
	// 类型
	| 'array' // 数组
	| 'object' // 对象
	// 展示
	| 'text'
	| 'tag'
	| 'alert'
	// 输入
	| 'input'
	| 'textarea'
	| 'number'
	| 'switch'
	| 'select'
	| 'radio'
	| 'multipleSelect'
	| 'treeSelect'
	| 'multipleTreeSelect'
	| 'date'
	| 'daterange'
	| 'time'
	| 'timerange'
	| 'datetime'
	| 'datetimerange'
	| 'tinyMCE'

/* ---------------------- 表单 */
export interface FormItemProps {
	itemInfo?: Partial<FormItemProps> | FormItemProps[] // 子属性，type 为 array的是单个，object的是非空数组，其他是空
	label?: string // 标题
	prop: string // 字段名
	labelWidth?: string | number // 标签的长度
	span?: number // 栅格宽度，默认 24（一行）
	isNewLine?: boolean // 是否换行，默认 false
	isShow?:
		| boolean
		| ((param: {
				item: FormItemProps
				data: Record<string, any>
				prop: string | number
				formData: Record<string, any>
		  }) => boolean) // 是否显示，参数都是只读，不要改
	_isShow?: (item: FormItemProps, data: Record<string, any>, prop: string | number) => boolean // 是否显示，只在内部使用
	isHideWipeData?: boolean // 隐藏时是否清空数据，默认是
	rules?: any[] | any // 规则
	alert?: string // 提示信息
	// -- 字典数据
	dict?: string | DictProps[] | (() => Promise<any>) // 字典类型（渲染值的字典），如果搜索是字典类型，会默认从此字段取值
	_dictData?: DictProps[] // 只在内部使用，字典类型（渲染值的字典），如果搜索是字典类型，会默认从此字段取值
	// -- 组件
	compType?: CompType // 类型
	compProps?: Record<string, any> // 参数，根据 element 文档来，标签自带属性 > props 属性
	compDefault?: any // 默认值，重置会恢复（数组中的元素也可以生效）
	// -- 其他
	[key: string]: any
}
